package com.sybil.ot.controlador;

import com.sybil.ot.dominio.Evento;
import com.sybil.ot.dominio.Solicitud;
import com.sybil.ot.servicio.EventoServicio;
import com.sybil.ot.servicio.FlujoServicio;
import com.sybil.ot.servicio.SolicitudServicio;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/solicitudes")
public class SolicitudControlador {

   @Autowired
   private SolicitudServicio solicitudServicio;
   @Autowired
   private EventoServicio eventoServicio;
   @Autowired
   private FlujoServicio flujoServicio;

   @RequestMapping(value = "/aprobar",params = {"cf", "sn"}, method = RequestMethod.GET)
   public String aprobarSolicitud(@RequestParam("cf") String claveFlujo,
           @RequestParam("sn") int numeroSolicitud, Model model) {
      Solicitud solicitud = solicitudServicio.obtenerSolicitud(claveFlujo, numeroSolicitud);
      List<Evento> eventos = eventoServicio.obtenerEventosDelPaso(claveFlujo, solicitud.getClavePaso());
      model.addAttribute("solicitud", solicitud);
      model.addAttribute("eventos", eventos);
      return "flujo/historico/aprobar";
   }

   @RequestMapping(params = {"cf", "sn"}, method = RequestMethod.GET)
   public String detallesSolicitud(@RequestParam("cf") String claveFlujo,
           @RequestParam("sn") int numeroSolicitud, Model model) {
      Solicitud solicitud = solicitudServicio.obtenerSolicitud(claveFlujo, numeroSolicitud);
      model.addAttribute("solicitud", solicitud);
      return "flujo/historico/detalle";
   }
   
   @RequestMapping(params = {"cf", "sn"}, method = RequestMethod.POST)
   public String solicitudProcesar(@RequestParam("cf") String claveFlujo,
           @RequestParam("sn") int numeroSolicitud, @RequestParam("cmb_evento") String claveEvento,
           @RequestParam("txa_comentarios") String comentarios, Model model) {
      String usuarioActual = SecurityContextHolder.getContext().getAuthentication().getName();
      solicitudServicio.aprobarSolicitud(claveFlujo, numeroSolicitud, usuarioActual, claveEvento, comentarios);
      return "redirect:/index";
   }

   @RequestMapping(value = "/historicos", method = RequestMethod.GET)
   public String historicosDelFlujo(Model model) {
      model.addAttribute("flujos", flujoServicio.obtenerFlujos());
      return "flujo/historico/filtros";
   }

   @RequestMapping(value = "/historicos", method = RequestMethod.POST)
   public String historicoDelFlujo(@RequestParam(required = false, value = "fd") String fechaDesde,
           @RequestParam(required = false, value = "fh") String fechaHasta, 
           @RequestParam(required = false, value = "est") String estatus,
           @RequestParam(required = false, value = "ns") String numeroSolicitud, 
           @RequestParam(required = false, value = "cf") String claveFlujo, Model model) {
//      int errorCount = result.getErrorCount();
      List<Solicitud> solicitudes = solicitudServicio.obtenerHistorico(claveFlujo, fechaDesde, fechaHasta, estatus, numeroSolicitud);
      model.addAttribute("solicitudes", solicitudes);
      return "flujo/historico/listado";
   }

   @RequestMapping(value = "/historicos", params = {"flujo", "solicitud"}, method = RequestMethod.GET)
   public String historicoDeSolicitud(Model model) {
//      model.addAttribute("clases", catalogoService.obtenerClases());
      return "flujo/historico/detalle";
   }
}
